// utils/request.js
//1. 引入 uni-ajax 模块  ,用法和 ajax 类似
import ajax from '@/uni_modules/u-ajax'
import { useUserStore } from '@/stores/user.js'

const tabBarPageth = [
  'pages/task/index',
  'pages/message/index',
  'pages/my/index'
]
//2.  创建请求实例 instance
const instance = ajax.create({
  // 初始配置
  baseURL: 'https://slwl-api.itheima.net'
})

// 添加请求拦截器  =>请求前
instance.interceptors.request.use(config => {
    uni.showLoading({
      title: '正在加载...',
      mask: true // 避免没有数据时候，用户点击页面中元素
    })
    const store = useUserStore()
    if (store.token) {
      config.header.Authorization = store.token
      console.log('请求头添加token成功');
    }
    // 在发送请求前做些什么
    return config
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器  =>请求后
instance.interceptors.response.use(
  response => {
    // 1. 请求成功走这里
    // 对响应数据做些什么
    // 请求成功或失败都关闭loading

    if (response.data.code !== 200) {
      uni.showToast({
        title: response.data.msg
      })
    }
    uni.hideLoading()
    // 场景1: 数据简化(数据剥离)
    // 处理返回数据
    return response.data

  },
  error => {
    // 2. 请求失败走这里
    // 对响应错误做些什么
    // 请求成功或失败都关闭loading
    // 场景2: 请求失败 和token失效

    // 页面栈
    const pageStack = getCurrentPages()
    console.log('页面堆栈', pageStack);
    // 当前页面地址
    const fullPath = pageStack[pageStack.length - 1].$page.fullPath

    const path = pageStack[pageStack.length - 1].route

    const routeType = tabBarPageth.includes(path) ? "switchTab" : "redirectTo"

    if (error.statusCode === 401) {
      uni.redirectTo({
        url: `/pages/login/index?routeType=${routeType}&redirectURL=${encodeURIComponent(fullPath)}`
      })

    }

    // 请求成功或失败都关闭loading
    uni.hideLoading()
    return Promise.reject(error)
  }
)

// 导出 create 创建后的实例
export default instance